Итак, давайте договоримся. По нажатию на левую кнопку новый эллипс, по нажатию на другую изменение размеров. Начнем с левой.
void CTestEllipseView::OnLButtonDown(UINT nFlags, CPoint point)
{
CTestEllipseDoc* pDoc = GetDocument();
CMyDialog cm;
cm.m_X1 = 0;
cm.m_Y1 = 0;
cm.m_X2 = 100;
cm.m_Y2 = 100;
if (cm.DoModal()==IDOK)
{
pDoc->cEllipce.Add(CRect(cm.m_X1,cm.m_Y1,cm.m_X2,cm.m_Y2));
pDoc->UpdateAllViews(NULL);
}
CView::OnLButtonDown(nFlags, point);
}
Класс этого диалога знаком из прошлых шагов. Только теперь при выборе кнопки OK производится добавление новых данных в контейнер и обновляются все виды.
По нажатию на правую кнопку необходимо провести редактирование. Вот код.
void CTestEllipseView::OnRButtonDown(UINT nFlags, CPoint point)
{
CTestEllipseDoc* pDoc = GetDocument();
int x=0;
x=pDoc->cEllipce.FindEllipce(point);
if (x!=-1)
{
CMyDialog cm;
cm.m_X1 = pDoc->cEllipce.Get(x).left;
cm.m_Y1 = pDoc->cEllipce.Get(x).top;
cm.m_X2 = pDoc->cEllipce.Get(x).right;
cm.m_Y2 = pDoc->cEllipce.Get(x).bottom;
if (cm.DoModal()==IDOK)
{
pDoc->cEllipce.SetData(x,CRect(cm.m_X1,cm.m_Y1,cm.m_X2,cm.m_Y2));
pDoc->UpdateAllViews(NULL);
}
}
CView::OnRButtonDown(nFlags, point);
}
Берем точку и ищем в элипсе. Если найдена, то передаем эти параметры в окно диалога и при выходе из диалога меняем данные в контейнере. Обновляем виды.
При тестировании не перепутайте клавиши !!! Очень Вас прошу. В проекте, который Вы можете загрузить лежат несколько моих файлов:
a.aaa a1.aaa
Можете из загрузить. Итак, правая редактирование, левая новый элипс. И пожалуйста попадайте внутрь при редактировании контура эллипса ;-)))